package com.zyl;

import com.zyl.config.SpringConfig;
import com.zyl.service.OrderService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 项目启动类：加载Spring IOC容器，测试OrderService的AOP增强效果
 */
public class Main {
    public static void main(String[] args) {
        // 1. 加载Spring IOC容器（基于注解配置类SpringConfig，自动扫描Bean和AOP切面）
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

        // 2. 从IOC容器中获取OrderService代理对象（Spring自动生成AOP代理，而非原始对象）
        OrderService orderService = context.getBean(OrderService.class);

        // ================================= 测试1：调用add方法（购买商品）=================================
        System.out.println("===================== 开始测试 add 方法 =====================");
        try {
            // 调用add方法：参数1=商品名，参数2=购买数量
            orderService.add("iPhone 15", 1);
        } catch (Exception e) {
            // 捕获权限校验失败的异常（无权限时终止方法，输出异常信息）
            System.out.println("add方法执行失败：" + e.getMessage());
            System.out.println("----------------------------------------");
        }

        // ================================= 测试2：调用delete方法（删除商品）=================================
        System.out.println("\n===================== 开始测试 delete 方法 =====================");
        try {
            // 调用delete方法：参数=要删除的商品名
            orderService.delete("华为Mate 60");
        } catch (Exception e) {
            System.out.println("delete方法执行失败：" + e.getMessage());
            System.out.println("----------------------------------------");
        }

        // ================================= 测试3：调用find方法（查询商品数量）=================================
        System.out.println("\n===================== 开始测试 find 方法 =====================");
        try {
            // 调用find方法：参数=要查询的商品名，接收返回的数量
            int count = orderService.find("小米14");
            // 此处可额外打印查询结果（验证返回值是否正确）
            System.out.println("Main方法中获取的查询结果：" + count);
        } catch (Exception e) {
            System.out.println("find方法执行失败：" + e.getMessage());
        }

        // 3. 关闭IOC容器（释放资源，如Bean的销毁方法）
        context.close();
    }
}